package com.junsi.system.mapper;

import com.junsi.system.domain.SysCity;
import com.junsi.system.vo.SysAreaCity;
import com.junsi.system.vo.SysCityVo;

import java.util.List;

import org.apache.ibatis.annotations.Param;	

/**
 * 省市区 数据层
 * 
 * @author ymx
 * @date 2019-05-30
 */
public interface SysCityMapper 
{
	/**
     * 查询省市区信息
     * 
     * @param cityCode 省市区ID
     * @return 省市区信息
     */
	public SysCity selectCityById(Integer cityCode);
	
	/**
     * 查询省市区列表
     * 
     * @param city 省市区信息
     * @return 省市区集合
     */
	public List<SysCity> selectCityList(SysCity city);
	
	
	/**
	 * 查询省列表
	 * 
	 * @return 省市区集合
	 */
	public List<SysCity> selectCityByPRo();
	
	/**
	 * 查询省市区列表
	 * @param proCode 省份ID
	 * @return 市区集合
	 */
	public List<SysCity> selectCityByCity(Integer proCode);
	
	/**
     * 新增省市区
     * 
     * @param city 省市区信息
     * @return 结果
     */
	public int insertCity(SysCity city);
	
	/**
	 * 新增省市区Oracle
	 * 
	 * @param city 省市区信息
	 * @return 结果
	 */
	public int insertCityOracle(SysCity city);
	
	/**
     * 修改省市区
     * 
     * @param city 省市区信息
     * @return 结果
     */
	public int updateCity(SysCity city);
	
	/**
     * 删除省市区
     * 
     * @param cityCode 省市区ID
     * @return 结果
     */
	public int deleteCityById(Integer cityCode);
	
	/**
     * 批量删除省市区
     * 
     * @param cityCodes 需要删除的数据ID
     * @return 结果
     */
	public int deleteCityByIds(String[] cityCodes);
	
	/**
	 * 查询城市数量
	 * @param cityCode 城市编码集合
	 * @return 城市数量
	 */
	public List<SysAreaCity> selectCityNum(@Param("areaCode") String areaCode, @Param("cityCode") String[] cityCode);
	
	/**
	 * 根据区域编码查询省市区列表
	 * 
	 * @param areaCode 区域编码
	 * @return 省市区集合
	 */
	public List<SysCity> selectCityByArea(Integer proCode,String areaCode);
	
	/**
	 * 过滤已选择城市数量
	 * 
	 * @return 城市数量
	 */
	public List<SysCityVo> selectOtherUseCity(@Param("areaCode") String areaCode);
	
	/**
	 * 根据区域编码和城市父级编码查询关联表数据
	 * 
	 * @return 城市数量
	 */
	public SysAreaCity compareAreaCityNum(@Param("areaCode") Integer areaCode, @Param("parentCode") Integer parentCode);
	
	/**
	 * 根据父级编码查询城市表数据
	 * 
	 * @return 城市数量
	 */
	public SysAreaCity compareCityNum(Integer parentCode);
	
	/**
	 * 查询本区区域全选城市数量（关联表）
	 * 
	 * @return 城市数量
	 */
	public List<SysCityVo> selectAreaUseCity(@Param("areaCode") String areaCode);
	
	/**
	 * 查询其他区域全选城市数量（关联表）
	 * 
	 * @return 城市数量
	 */
	public List<SysCityVo> selectOtherCheckCityNum(@Param("areaCode") String areaCode);
	
	/**
	 * 查询其他区域未全选城市数量（关联表）
	 * 
	 * @return 城市数量
	 */
	public List<SysCityVo> selectOtherUnCheckCityNum(@Param("areaCode") String areaCode);
	
	/**
	 * 查询省级下子节点数（城市表）
	 * 
	 * @return 城市数量
	 */
	public SysCityVo selectNumByPar(@Param("parentCode") String parentCode);
	
	/**
	 * 查询省级下子节点数（关联表）
	 * 
	 * @return 城市数量
	 */
	public List<SysCityVo> selectCheckNum(@Param("cityCode") int[] cityCode);
	
	/**
	 * 查询省级（关联表）
	 * 
	 * @return 城市数量
	 */
	public List<SysAreaCity> selectPro(@Param("areaCode") String areaCode);
	
	/**
	 * 查询省级下市级节点（关联表）
	 * 
	 * @return 城市数量
	 */
	public List<SysAreaCity> selectChild(@Param("areaCode") String areaCode, @Param("cityCode") String cityCode);
}